* finder.el (finder-by-keyword): Build an alist to pass to
authorJim Blandy <jimb@redhat.com>
Sat, 10 Apr 1993 06:20:55 +0000 (06:20 +0000)
committerJim Blandy <jimb@redhat.com>
Sat, 10 Apr 1993 06:20:55 +0000 (06:20 +0000)
completing-read, instead of building an invalid obarray.

* finder.el (finder-by-keyword): If the user quits or enters the
empty string in response to the keyword prompt, restore the old
window configuration properly.

lisp/finder.el

index ce3b858c00902009cffa921a3a9f3bc0eb28bc3c..57c5995e79038818f45c07ff08465868d36ffa1a 100644 (file)
@@ -132,40 +132,42 @@ arguments compiles from `load-path'."
 (defun finder-by-keyword ()
   "Find packages matching a given keyword."
   (interactive)
-  (pop-to-buffer "*Help*")
+  (set-buffer (get-buffer-create "*Help*"))
   (erase-buffer)
-  (mapcar
-   (function (lambda (x)
-              (insert (symbol-name (car x)))
-              (insert-at-column 14 (cdr x) "\n")
-              ))
-   finder-known-keywords)
-  (goto-char (point-min))
-  (let (key
-       (known (mapcar (function (lambda (x) (car x))) finder-known-keywords)))
-    (let ((key (completing-read
-               "Package keyword: "
-               (vconcat known)
-               (function (lambda (arg) (memq arg known)))
-               t))
+
+  ;; Display descriptions of the keywords in the help buffer, and
+  ;; build an assoc list mapping the names of known keywords to their
+  ;; symbols.
+  (let ((keyword-names
+        (mapcar (lambda (assoc)
+                  (let ((keyword (car assoc)))
+                    (insert (symbol-name keyword))
+                    (insert-at-column 14 (cdr assoc) "\n")
+                    (cons (symbol-name keyword) keyword)))
+                finder-known-keywords)))
+    (let ((key 
+          (save-window-excursion
+            (pop-to-buffer "*Help*")
+            (goto-char (point-min))
+            (completing-read "Package keyword: " keyword-names nil t)))
          id)
-      (erase-buffer)
-      (if (equal key "")
-         (delete-window (get-buffer-window "*Help*"))
-       (setq id (intern key))
-       (insert
-        "The following packages match the keyword `" key "':\n\n")
-       (mapcar
-        (function (lambda (x)
-                    (if (memq id (car (cdr (cdr x))))
-                        (progn
-                          (insert (car x))
-                          (insert-at-column 16 (car (cdr x)) "\n")
-                          ))
-                    ))
-        finder-package-info)
-       (goto-char (point-min))
-       ))))
+      (or (equal key "")
+         (progn
+           (erase-buffer)
+           (pop-to-buffer "*Help*")
+           (setq id (intern key))
+           (insert
+            "The following packages match the keyword `" key "':\n\n")
+           (mapcar
+            (function (lambda (x)
+                        (if (memq id (car (cdr (cdr x))))
+                            (progn
+                              (insert (car x))
+                              (insert-at-column 16 (car (cdr x)) "\n")
+                              ))
+                        ))
+            finder-package-info)
+           (goto-char (point-min)))))))
 
 (provide 'finder)